package com.lx.timer.springtask;

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;

/**
 * 使用spring-boot通过注解的方式实现定时任务
 *
 * @author 段誉
 * @create 2019-04-02 14:19
 */
@Slf4j
@Component
//对当前类开启异步（开启后每个方法的执行均在不同的线程中），也可以加在方法上
@Async
public class TestSpringTask {
  /**
   * 通过表达式来配置任务执行时间
   */
  @Scheduled(cron = "0/5 * * * * *")
  public void scheduled() {
    log.info("=====>>>>>使用cron:{}", System.currentTimeMillis());
  }

  /**
   * 按一定频率执行的定时任务
   */
  @Scheduled(fixedRate = 5000)
  public void scheduled1() {
    log.info("=====>>>>>使用fixedRate:{}", System.currentTimeMillis());
  }

  /**
   * 功能同fixedRate，但是可以配合initialDelay属性设置任务延时执行
   */
  @Scheduled(fixedDelay = 5000)
  public void scheduled2() {
    log.info("=====>>>>>使用fixedDelay:{}", System.currentTimeMillis());
  }
}
